from swarm import Agent
import datetime
import os
import json

def analysis_instructions():
    ret = """你是中国海关12360热线的一名对话分析智能体。
    你的任务是对用户本次已经完成请求进行分析，并根据分析结果更新本次问答记录。
    注意：请按照以下的的步骤进行，并立刻开始第一步：
    1.在调用你的时候说明本次用户所有请求已经完成，请你直接阅读本次用户与所有智能体的对话记录，并调用store_origin_chatlog()函数并输入对话记录。
    2.请直接阅读本次用户与所有智能体的对话记录，并生成一份详细的分析文档，重点包括：\n对话的主题和目的：\n用户和客服之间交流的主要内容是什么？\n用户提出的问题或需求是什么？\n用户情绪分析：\n用户在对话中表现出的情绪或态度（如满意、不满意、怀疑、紧张等）。\n客服响应质量：\n客服是否有效解决了用户的问题？如果没有，是否有后续行动？\n客服的语气和态度是否友好、专业？\n关键问题和解决方案：\n用户提出的具体问题和客服给出的解决方案。\n如果有未解决的问题，请明确指出。\n对话的整体氛围和结论：\n对话的整体情绪是积极、消极还是中性？\n是否有需要改进的地方，如客服响应时间、信息清晰度等？
    3.请从第二步的分析文档中提取出下列信息：
        `key_issues`： 从报告中提取关键问题并用字符串列表存储。
        `solution`：从报告中提取建议的解决方案，使用字符串列表存储。
        `conversation_time`: 格式为 YYYY-MM-DD HH:MM:SS（如果没有具体时间，可以留空）。
        `conversation_label`: 包含以下嵌套字段：
            `issue_category`: 对话内容的类别（如“购物退货”）。
            `topic_tag`：对话内容的主要标签关键字（如 “个人物品”）。
            `sentiment_tags`：根据对话的进展情况划分的 `initial`（初始）、`middle`（中期）和 `late`（后期）情感，每个字段都存储为由情感词组成的字符串列表。
            `functional_labels`：描述对话的主要目的或功能，以字符串列表的形式存储（如 “日程安排”）。
    请从报告中准确提取相应信息，保持简洁明了。任何缺失的项目都会用空值“”或空列表[]代替。请将上述信息汇总成一个名为chatlog_summarization的jsonl格式的字符串。
    4.请调用add_record_to_json()函数并输入chatlog_summarization来将数据保存至JSON文件中。
    5.在完成上述步骤后，请调用transfer_to_triage()函数转移到分诊智能体。
    注意：请记住，你需要在调用store_origin_chatlog()函数时传入1个参数参数:
        chatlog：本次用户与所有智能体的对话记录，以字符串的形式进行输入
    """
    return ret

def store_origin_chatlog(chatlog):
    current_year = str(datetime.datetime.now().year)
    current_month = str(datetime.datetime.now().month).zfill(2)
    current_day = str(datetime.datetime.now().day).zfill(2)
    year_folder_path = os.path.join("D:\\robotlearn\\agent\\Customs_agent_assistant\\hsa-master\\test\\chatlog", current_year)
    year_month_folder_path = os.path.join(year_folder_path, f"{current_year}-{current_month}")
    if not os.path.exists(year_folder_path):
        os.mkdir(year_folder_path)
    if not os.path.exists(year_month_folder_path):
        os.mkdir(year_month_folder_path)
    file_name = f"{current_year}-{current_month}-{current_day}.json"
    file_path = os.path.join(year_month_folder_path, file_name)
    new_record = {
        "chatlog": chatlog
    }
    try:
        try:
            with open(file_path, 'r', encoding='utf-8') as file:
                data = json.load(file)
        except FileNotFoundError:
            data = []
        data.append(new_record)
        with open(file_path, 'w', encoding='utf-8') as file:
            json.dump(data, file, indent=4, ensure_ascii=False)
        print("记录添加成功。")
    except Exception as e:
        print(f"添加记录时出错: {e}")

def add_record_to_json(chatlog_summarization):
    current_year = str(datetime.datetime.now().year)
    current_month = str(datetime.datetime.now().month).zfill(2)
    current_day = str(datetime.datetime.now().day).zfill(2)
    year_folder_path = os.path.join("D:\\robotlearn\\agent\\Customs_agent_assistant\\hsa-master\\test\\chatlog_summarization", current_year)
    year_month_folder_path = os.path.join(year_folder_path, f"{current_year}-{current_month}")
    if not os.path.exists(year_folder_path):
        os.mkdir(year_folder_path)
    if not os.path.exists(year_month_folder_path):
        os.mkdir(year_month_folder_path)
    file_name = f"{current_year}-{current_month}-{current_day}.json"
    file_path = os.path.join(year_month_folder_path, file_name)
    try:
        with open(file_path, 'a', encoding='utf-8') as f:
            f.write(chatlog_summarization)
            f.write('\n')
        print("记录添加成功。")
    except Exception as e:
        print(f"添加记录时出错: {e}")

# Conversation_analytics_agent = Agent(
#     name="Conversation analytics",
#     model = "qwen-max-0919",
#     instructions=analysis_instructions,
#     functions=[store_origin_chatlog, add_record_to_json, transfer_to_triage]
# )